home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
- maxscrdiv EQU 8
- max3ddiv EQU 5
-
- zsinval EQU 8 ;w
- zcosval EQU 10 ;w
- ztox EQU 12 ;l
- xsinval EQU 16 ;w
- xcosval EQU 18 ;w
- xspd EQU 20 ;w
- zspd EQU 22 ;w
- mapx EQU 24 ;b
- mapz EQU 25 ;b
- whichtile EQU 26 ;b
- xofflight EQU 28 ;w
- zofflight EQU 30 ;w
- offlight EQU 32 ;w
- zlinestore EQU 34
- zlinedir EQU 38
- zposdir EQU 40
- zposstore EQU 42
- xdiststore EQU 44
- xdistdir EQU 46
- zwallfound EQU 48
-
- xlinestore EQU 50
- xlinedir EQU 54
- xposdir EQU 56
- xposstore EQU 58
- zdiststore EQU 60
- zdistdir EQU 62
- xwallfound EQU 64
-
-
- midoffset EQU 104*4*40
-
- SECTION Scrn,CODE_F
-
- OpenLib equ -552 ; Offset for OpenLibrary.
- CloseLib equ -414 ; Offset for CloseLibrary.
-
- vhposr equ $006
- vhposrl equ $007
- bltcon0 equ $40
- bltcon1 equ $42
- bltcpt equ $48
- bltbpt equ $4c
- bltapt equ $50
- spr0ctl equ $142
- spr1ctl equ $14a
- spr2ctl equ $152
- spr3ctl equ $15a
- spr4ctl equ $162
- spr5ctl equ $16a
- spr6ctl equ $172
- spr7ctl equ $17a
- spr0pos equ $140
- spr1pos equ $148
- spr2pos equ $150
- spr3pos equ $158
- spr4pos equ $160
- spr5pos equ $168
- spr6pos equ $170
- spr7pos equ $178
- bltdpt equ $54
- bltafwm equ $44
- bltalwm equ $46
- bltsize equ $58
- bltcmod equ $60
- bltbmod equ $62
- bltamod equ $64
- bltdmod equ $66
- diwstart equ $8e ; Screen hardware registers.
- diwstop equ $90
- ddfstart equ $92
- ddfstop equ $94
- bplcon0 equ $100
- bplcon1 equ $102
- col0 equ $180
- col1 equ $182
- col2 equ $184
- col3 equ $186
- col4 equ $188
- col5 equ $18a
- col6 equ $18c
- col7 equ $18e
- col8 equ $190
- col9 equ $192
- col10 equ $194
- dmacon equ $96
- dmaconr equ $002
- intenar equ $01c
- intena equ $09a
- intreq equ $09c
- intreqr equ $01e
- intreqrl equ $01f
- bpl1pth equ $e0
- bpl1ptl equ $e2
- bpl2pth equ $e4
- bpl2ptl equ $e6
- bpl3pth equ $e8
- bpl3ptl equ $ea
- bpl4pth equ $ec
- bpl4ptl equ $ee
- bpl5pth equ $f0
- bpl5ptl equ $f2
- bpl6pth equ $f4
- bpl6ptl equ $f6
- bpl7pth equ $f8
- bpl7ptl equ $fa
-
- ** This waits for the blitter to finish before allowing program
- ** execution to continue.
-
- WB MACRO
- \@bf:
- btst #6,dmaconr(a6)
- bne.s \@bf
- ENDM
-
- *Another version for when d6 <> dff000
-
- WBSLOW MACRO
- \@bf:
- btst #6,$dff000+dmaconr
- bne.s \@bf
- ENDM
-
-
- **
-
- include "macros.i"
-
- move.w (a0),option
-
- jmp stuff
- endstuff:
-
- move.l #$dff000,a6 ; NB V. IMPORTANT: A6=CUSTOM BASE
- move.w #$87c0,dmacon(a6)
- move.w #$0020,dmacon(a6)
- move.w intenar(a6),saveinters
- move.w #$7fff,intena(a6)
- move.w #$c010,intena(a6)
-
- *** Put myself in supervisor mode
-
- move.w #$20,$dff1dc
-
- jmp blag
-
- ; move.l #blag,$80
- ; trap #0
- ; rts
-
- saveit: dc.l 0
-
- blag:
- move.w #$10,intreq(a6)
- move.w #$7fff,intena(a6)
-
-
- move.l #bigfield,$dff080 ; Point the copper at our copperlist.
- move.l #$dff000,a6 ; a6 points at the first custom chip register.
-
- move.w #0,d0
-
- move.l #scrn,d0
- move.w d0,pl1l
- swap d0
- move.w d0,pl1h
-
- move.l #scrn+40,d0
- move.w d0,pl2l
- swap d0
- move.w d0,pl2h
-
- move.l #scrn+80,d0
- move.w d0,pl3l
- swap d0
- move.w d0,pl3h
-
- move.l #scrn+120,d0
- move.w d0,pl4l
- swap d0
- move.w d0,pl4h
-
- move.l #scrn+160,d0
- move.w d0,pl5l
- swap d0
- move.w d0,pl5h
-
- move.l #scrn+200,d0
- move.w d0,pl6l
- swap d0
- move.w d0,pl6h
-
- move.l #scrn+240,d0
- move.w d0,pl7l
- swap d0
- move.w d0,pl7h
-
- move.l #colbars,a0
- move.l #colbars2,a2
- move.w #127,d0
- move.l #0,d6
- move.w #0,d3
- move.w #$2bdf,startwait
- move.w #$2d01,endwait
- fillcop
- move.w #$180,d1
-
- move.l a0,a1
- move.l a2,a3
- move.w #$10c,(a1)+
- move.w #$10c,(a3)+
- move.w d3,(a1)+
- move.w d3,(a3)+
- eor.w #$8000,d3
-
- move.w #$106,(a1)+
- move.w #$106,(a3)+
- move.w #$2c40,d5
- or.w d3,d5
- move.w d5,(a1)+
- move.w d5,(a3)+
- bsr do32
-
- move.w #$106,(a1)+
- move.w #$106,(a3)+
- move.w #$4c40,d5
- or.w d3,d5
- move.w d5,(a1)+
- move.w d5,(a3)+
- bsr do32
-
- move.w #$106,(a1)+
- move.w #$106,(a3)+
- move.w #$6c40,d5
- or.w d3,d5
- move.w d5,(a1)+
- move.w d5,(a3)+
- bsr do32
-
- **********************************
-
- cmp.b #'s',option
- beq.s smallscrn
-
- move.w startwait,(a1)+
- move.w #$fffe,(a1)+
- move.w endwait,(a1)+
- move.w #$ff00,(a1)+
- move.w startwait,(a3)+
- move.w #$fffe,(a3)+
- move.w endwait,(a3)+
- move.w #$ff00,(a3)+
-
- add.w #$300,startwait
- add.w #$300,endwait
-
- smallscrn:
- **********************************
-
- adda.w #104*4,a0
- adda.w #104*4,a2
-
- dbra d0,fillcop
-
- **********************************
- cmp.b #'s',option
- beq smallnotlarge
- move.w #$38,fetchstart
- move.w #$b8,fetchstop
- move.w #$2c81,winstart
- move.w #$2cc1,winstop
- move.w #-40,modulo
- move.w #-40,modulo+4
-
- move.l #scrn+40,a0
- move.l #scrn+160,a1
- move.l #scrn+280,a2
- move.l #scrntab,a3
- move.w #319,d7 ; counter
- move.w #0,d1 ; xpos
- plotscrnloop:
- move.b (a3)+,d0
- move.w d1,d2
- asr.w #3,d2
- move.b d1,d3
- not.b d3
- bclr.b d3,-40(a0,d2.w)
- bclr.b d3,(a0,d2.w)
- bclr.b d3,40(a0,d2.w)
- bclr.b d3,-40(a1,d2.w)
- bclr.b d3,(a1,d2.w)
- bclr.b d3,40(a1,d2.w)
- bclr.b d3,-40(a2,d2.w)
- btst #0,d0
- beq.s nobp1
- bset.b d3,-40(a0,d2.w)
- nobp1:
- btst #1,d0
- beq.s nobp2
- bset.b d3,(a0,d2.w)
- nobp2:
- btst #2,d0
- beq.s nobp3
- bset.b d3,40(a0,d2.w)
- nobp3:
- btst #3,d0
- beq.s nobp4
- bset.b d3,-40(a1,d2.w)
- nobp4:
- btst #4,d0
- beq.s nobp5
- bset.b d3,(a1,d2.w)
- nobp5:
- btst #5,d0
- beq.s nobp6
- bset.b d3,40(a1,d2.w)
- nobp6:
- btst #6,d0
- beq.s nobp7
- bset.b d3,-40(a2,d2.w)
- nobp7:
-
- addq #1,d1
-
- dbra d7,plotscrnloop
-
- smallnotlarge:
-
- **********************************
-
- ****************************
- ; bsr initobjpos
- ****************************
-
- lop:
-
- move.l #$dff000,a6
-
- waitfortop:
- btst.b #0,intreqrl(a6)
- beq waitfortop
- move.w #$1,intreq(a6)
-
-
- move.l drawpt,d0
- move.l olddrawpt,drawpt
- move.l d0,olddrawpt
- move.l d0,$dff084
- move.l drawpt,a3
- adda.w #10,a3
- move.l a3,frompt
- add.l #104*4*40,a3
- move.l a3,midpt
-
- move.l #landfile,a1
- move.l #landpic,a5
- move.l frompt,a0
- move.l #104*4,d0
- move.l #landcheat+(48+90)*4,a2
-
- move.w angspd,d1
- move.w ang,d0
-
- move.w #2,d7
-
- move.w d1,d2
- neg.w d2
- cmp.w d7,d2
- ble.s okslow
- move.w d7,d2
- okslow
- neg.w d7
- cmp.w d7,d2
- bge.s okslo
- move.w d7,d2
- okslo:
-
- asr.w #1,d7
-
- btst #1,$d(a6)
- sne d3
- beq.s notleft
- move.w d7,d2
- neg.w d2
- ; tst.w d1
- ; bge.s notleft
- ; moveq #0,d1
- notleft
-
- btst #1,$c(a6)
- sne d4
- beq.s notright
- move.w d7,d2
- ; tst.w d1
- ; ble.s notright
- ; moveq #0,d1
- notright
-
- move.w #0,Spd
-
- btst #0,$dff00c
- sne d5
- eor.b d4,d5
- beq.s notup
- move.w #4,Spd
- notup:
-
- btst #0,$dff00d
- sne d5
- eor.b d3,d5
- beq.s notdown
- move.w #-4,Spd
- notdown:
-
- move.w Spd,d7
-
- add.w d2,d1
- cmp.w #-10,d1
- bge.s okspdlft
- move.w #-10,d1
- okspdlft:
- cmp.w #10,d1
- ble.s okspdrgt
- move.w #10,d1
- okspdrgt:
-
- move.w d1,angspd
- add.w d1,d0
- ext.l d0
- add.l #360,d0
- divs #360,d0
- swap d0
- move.w d0,ang
-
- lea (a2,d0.w*4),a2
- move.l (a2),d0
- asr.l #8,d0
- move.w d0,tempx
-
- muls d0,d7
- add.w d7,zpos
-
- suba.w #90*4,a2
- move.l (a2),temp
- suba.w #48*4,a2
-
- move.w Spd,d7
- add.w d7,d7
- move.l temp,d0
- asr.l #1,d0
- muls d0,d7
- asr.l #8,d7
- add.w d7,xpos
-
- move.w zpos,d7
- move.b xpos,d7
- move.w d7,zoff
-
- move.w #2,d7
- moveq #0,d4
- moveq #0,d1
- moveq #0,d6
- move.w zoff,d6
- moveq #0,d0
- move.b (a1,d6.l),d0
- sub.b #160,d0
-
- ; d0 = targyoff
-
- move.w yoff,d1
- sub.w d1,d0
- bgt.s notinfloor
- add.w d0,d1
- asl.w #1,d0
-
- cmp.w yvel,d0
- bge.s nopushup
-
- move.w d0,yvel
- nopushup:
- notinfloor:
- move.w yvel,d0
- asr.w #2,d0
- add.w d0,d1
-
- bge.s okoffset
- move.w #0,d1
- okoffset:
-
- and.w #$ff,d1
- move.w d1,yoff
-
- add.w #4,yvel
-
- donemovey
-
- move.l #heightcheat,a6
- move.w yoff,d0
- sub.w d0,a6
- move.w #256,d5
- move.l frompt,a4
- add.l #100*104*4,a4
-
- move.l #skypic,skyaddr
-
- move.w ang,d2
-
- muls #320,d2
- add.l d2,skyaddr
-
- move.l #landpal+512*5,a3
-
- bsr doblock
- addq #4,a4
- bsr doblock
- addq #4,a4
- bsr doblock
-
- move.l #$dff000,a6
-
- btst #6,$bfe001
- beq end
-
- bra lop
-
- end:
- move.w #$f8e,$dff1dc
- jmp closeeverything
-
- spd: dc.w 0
- ang: dc.w 0
- angspd: dc.w 0
- tempx: dc.l 0
- zoff: dc.w 0
- option: dc.w 0
- temp: dc.l 0
-
- yvel: dc.w 0
-
- xpos: dc.w 0
- zpos: dc.w 0
-
- doblock:
- move.w #31,d3
- acrossl:
- move.l 90*4(a2),d5
- asr.l #8,d5
- move.l (a2)+,a0
- add.l temp(pc),a0
- add.w tempx(pc),d5
- moveq #0,d7
- swap d3
- move.w zoff(pc),d3
- move.w d6,-(a7)
- moveq #0,d4
- swap d6
- clr.w d6
- move.l a6,-(a7)
- move.l a4,-(a7)
- swap d5
- move.w #14,d5
- moveq.l #89,d2
- outerland:
- swap d5
- putinland:
- move.w d3,d4
- swap d6
- move.b d6,d4
- swap d6
- add.l a0,d6
- add.w d5,d3
- move.b (a1,d4.l),d1
- move.b (a6,d1.w),d0
-
- sub.b d7,d0
- ble.s allbehind
- swap d2
- add.b d0,d7
- move.b (a5,d4.l),d2
- move.w (a3,d2.w*2),d4
- upstrip
- move.w d4,(a4)
- suba.w #104*4,a4
- subq #1,d0
- bgt.s upstrip
- swap d2
-
- allbehind:
- adda.w #256,a6
- dbra d2,putinland
-
- swap d5
- moveq.l #3,d2
- adda.w #512,a3
- dbra d5,outerland
-
- move.l #landpal,a3
-
- move.l skyaddr(pc),a6
- move.w #99,d2
- sub.w d7,d2
- ble.s noclrbit
- lea (a6,d2.w*2),a6
- clrbit:
- move.w -(a6),(a4)
- suba.w #104*4,a4
- subq #1,d2
- bgt.s clrbit
- noclrbit:
-
- move.l skyaddr,d2
- add.l #160,d2
- cmp.l #endsky,d2
- blt.s nobacktobeginning
-
- move.l #skypic,d2
-
- nobacktobeginning:
- move.l d2,skyaddr
-
- move.l (a7)+,a4
- move.l (a7)+,a6
- move.w (a7)+,d6
- addq #4,a4
- swap d3
- dbra d3,acrossl
- rts
-
- skyaddr: dc.l 0
-
- do32:
- move.w #31,d7
- move.w #$180,d1
- across:
- move.w d1,(a1)+
- move.w d1,(a3)+
- move.w #0,(a1)+
- move.w #0,(a3)+
- add.w #2,d1
- dbra d7,across
- rts
-
-
-
- *************************************
- * Set left and right clip values
- *************************************
-
-
- everyframe:
-
- move.w #$0010,$dff000+intreq
-
- rte
-
- saveinters:
- dc.w 0
-
- z: dc.w 10
- midpt: dc.l 0
-
- test: dc.l 0
- ds.l 30
-
- drawpt: dc.l colbars2
- olddrawpt: dc.l colbars
- frompt: dc.l colbars2
-
- Spd:
- angpos: dc.w 0
- wallyoff: dc.w 0
- flooryoff: dc.w 0
- xoff: dc.l 0
- yoff: dc.w 255-160
- tyoff: dc.l 0
-
-
- liftanimtab:
-
- endliftanimtab:
-
- Roompt: dc.l 0
- OldRoompt: dc.l 0
-
- wallpt: dc.l 0
- floorpt: dc.l 0
-
- Rotated:
- ds.l 800
-
- OnScreen:
- ds.l 800
-
- startwait: dc.w 0
- endwait: dc.w 0
-
-
- landcheat: incbin "work:inc/smallcheatfile"
- landfile: incbin "work:inc/landfile"
- heightcheat: incbin "work:inc/heightcheat"
- landpic: incbin "work:inc/landpic"
- landpal: incbin "work:inc/landpal"
-
- skypic: dcb.w 160*360,$742
- endsky:
-
- SECTION ffff,CODE_C
-
- bigfield: ; Start of our copper list.
-
- dc.w intreq,$8001
- dc.w $1fc,$3
- dc.w diwstart
- winstart: dc.w $2cb1
- dc.w diwstop
- winstop: dc.w $2c91
- dc.w ddfstart
- fetchstart: dc.w $48
- dc.w ddfstop
- fetchstop: dc.w $88
-
- dc.w bplcon0,$7201
- dc.w bplcon1
- smoff:
- dc.w $0
-
- dc.w col0,0
-
- dc.w $108
- modulo: dc.w -24
- dc.w $10a,-24
-
- dc.w bpl1pth
- pl1h
- dc.w 0
-
- dc.w bpl1ptl
- pl1l
- dc.w 0
-
- dc.w bpl2pth
- pl2h
- dc.w 0
-
- dc.w bpl2ptl
- pl2l
- dc.w 0
-
- dc.w bpl3pth
- pl3h
- dc.w 0
-
- dc.w bpl3ptl
- pl3l
- dc.w 0
-
- dc.w bpl4pth
- pl4h
- dc.w 0
-
- dc.w bpl4ptl
- pl4l
- dc.w 0
-
- dc.w bpl5pth
- pl5h
- dc.w 0
-
- dc.w bpl5ptl
- pl5l
- dc.w 0
-
- dc.w bpl6pth
- pl6h
- dc.w 0
-
- dc.w bpl6ptl
- pl6l
- dc.w 0
-
- dc.w bpl7pth
- pl7h
- dc.w 0
-
- dc.w bpl7ptl
- pl7l
- dc.w 0
-
-
- dc.w $1001,$ff00
- dc.w intreq,$1
- yposcop:
- dc.w $2a11,$fffe
- dc.w $8a,0
-
- dcb.l 104*40,$1fe0000
- colbars:
- val SET $2a
- dcb.l 104*128,$1fe0000
-
- dc.w $ffff,$fffe ; End copper list.
-
- old dc.l 0
-
- dcb.l 104*40,$1fe0000
-
- colbars2:
- val SET $2a
- dcb.l 104*128,$1fe0000
-
- dc.w $106,$c40
- dc.w $180
- signal: dc.w 0
-
- dc.w $ffff,$fffe ; End copper list.
-
- dc.w $0
-
-
- ********************************************
- * Stuff you don't have to worry about yet. *
- ********************************************
-
- closeeverything:
- move.l old,$dff080 ; Restore old copper list.
- move.w #$8020,dmacon(a6)
- move.w saveinters,d0
- or.w #$c000,d0
- move.w d0,intena(a6)
- clr.w $dff0a8
- clr.w $dff0b8
- clr.w $dff0c8
- clr.w $dff0d8
- rts
-
- stuff:
- move.l 4.w,a6 ; Get EXECBASE.
- lea gfxname(PC),a1 ; Point to 'graphics.library' string.
- moveq #0,d0 ; Ignore version number.
- jsr OpenLib(a6) ; Open the library.
- move.l d0,a1 ; Store library address.
- move.l 38(a1),old ; Store workbench copper address.
- move.l 4.w,a6 ; Get EXECBASE again.
- jsr CloseLib(a6) ; Close the library.
-
- jmp endstuff
-
- gfxname dc.b "graphics.library",0
-
- scrntab:
- ds.b 16
- val SET 32
- REPT 96
- dc.b val,val,val
- val SET val+1
- ENDR
- ds.b 16
-
- cnop 0,64
- scrn:
-
- dcb.l 8,$33333333
- dc.l 0
- dc.l 0
-
- dcb.l 8,$0f0f0f0f
- dc.l 0
- dc.l 0
-
- dcb.l 8,$00ff00ff
- dc.l 0
- dc.l 0
-
- dcb.l 8,$0000ffff
- dc.l 0
- dc.l 0
-
- dc.l 0,-1,0,-1,0,-1,0,-1
- dc.l 0
- dc.l 0
-
- dc.l -1,-1,0,0,-1,-1,0,0
- dc.l 0
- dc.l 0
-
- dc.l 0,0,-1,-1,-1,-1,-1,-1
- dc.l 0
- dc.l 0
-
-
-
-